其他
我把单片机玩死了(完整版,两万字工程师实录)
The following article is from 单片机爱好者 Author MCU起航
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:MOV SP,#60H
MOV TMOD,#20H
MOV TL1,#0FDH
MOV TH1,#0FDH
MOV PCON,#00H
SETB TR1
MOV SCON,#50H
LOOP:JB TI,FH
JB RI,SD
SJMP LOOP
SD:CLR RI
MOV A,SBUF
INC A
MOV SBUF,A
FH:CLR TI
JMP LOOP
END
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP INTER
ORG 0100H
MAIN:MOV SP,#60H
MOV TMOD,#01H
MOV R2,#0FH
ACALL INTER1
HERE:JMP HERE
INTER1:MOV TL0,#0BCH
MOV TH0,#03CH
SETB EA
SETB ET0
SETB TR0
RET
INTER:MOV TL0,#0BCH
MOV TH0,#03CH
DJNZ R2,FAN
CPL P1.0
MOV R2,#0FH
FAN:RETI
ORG0000H
LJMPMAIN
ORG0100H
MAIN:CLRP2.0
MOVP1,#0FEH
MOVA,P1
CJNEA,#0FEH,SAO1
MOVP1,#0FDH
MOVA,P1
CJNEA,#0FDH,SAO2
MOVP1,#0FBH
MOVA,P1
CJNEA,#0FBH,SAO3
MOVP1,#0F7H
MOVA,P1
CJNEA,#0F7H,SAO4
LJMPMAIN
SAO1:ACALLDELAY
MOVA,P1
CJNEA,#0FEH,PAN1
LJMPMAIN
PAN1:CJNEA,#0EEH,PD1
MOVA,#00H
LJMPSEND
PD1:CJNEA,#0DEH,PD2
MOVA,#01H
LJMPSEND
PD2:CJNEA,#0BEH,PD3
MOVA,#02H
LJMPSEND
PD3:MOVA,#03H
LJMPSEND
SAO2:ACALLDELAY
MOVA,P1
CJNEA,#0FDH,PAN2
LJMPMAIN
PAN2:CJNEA,#0EDH,PD4
MOVA,#04H
LJMPSEND
PD4:CJNEA,#0DDH,PD5
MOVA,#05H
LJMPSEND
PD5:CJNEA,#0BDH,PD6
MOVA,#06H
LJMPSEND
PD6:MOVA,#07H
LJMPSEND
SAO3:ACALLDELAY
MOVA,P1
CJNEA,#0FBH,PAN3
LJMPMAIN
PAN3:CJNEA,#0EBH,PD7
MOVA,#08H
LJMPSEND
PD7:CJNEA,#0DBH,PD8
MOVA,#09H
LJMPSEND
PD8:CJNEA,#0BBH,PD9
MOVA,#0AH
LJMPSEND
PD9:MOVA,#0BH
LJMPSEND
SAO4:ACALLDELAY
MOVA,P1
CJNEA,#0F7H,PAN4
LJMPMAIN
PAN4:CJNEA,#0E7H,PD10
MOVA,#0CH
LJMPSEND
PD10:CJNEA,#0D7H,PD11
MOVA,#0DH
LJMPSEND
PD11:CJNEA,#0B7H,PD12
MOVA,#0EH
LJMPSEND
PD12:MOVA,#0FH
LJMPSEND
SEND:MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVP0,A
LJMPMAIN
DELAY:MOVR7,#100
D1:MOVR6,#50
D2:DJNZR6,D2
DJNZR7,D1
RET
TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,80H,0C6H,0C0H,86H,8EH,7FH
END
***************************************
keyvalue data 30h
power data 31h;理疗输出功率变量
time data 32h;治疗时间存储变量
timepal data 33h;输出功率定时参数低位
timepah data 34h;输出功率定时参数高位
timelastset data 35h ;备份用户设置治疗时间
STORE_TIME data 36h ;预热开始定时参数位置值存储空间
--------------------------------------------------------------------------
checkkey:
jnb keyflag,setbex1 ;有键盘中断进入键盘处理程序,没有则跳转
mov r1,keyvalue
k1: cjne r1,#0feh,k2
lcall powinc ;跳转到功率增加子程序段
ajmp kout
k2: cjne r1,#0fdh,k3
lcall powdec ;跳转到功率减少子程序段
ajmp kout
k3: cjne r1,#0fbh,k4
lcall timeinc ;跳转到时间增加子程序段
ajmp kout
k4: cjne r1,#0f7h,k5
lcall timedec ;跳转到时间减少子程序段
ajmp kout
k5: cjne r1,#0efh,setbex1
lcall onoff ;跳转到onoff子程序段
kout: clr keyflag ;清除键盘中断标志
lcall playkeysound ;播放按键音
; lcall d100ms
lcall d100ms ;每秒最多响应3次按键
setb ex1 ;开键盘中断
首先,我真的不是大神,只是在某些方面会的多一些,真正的大神,都在一声不吭的忙着做项目,我也就爱闲逛,所以才多说一点,多写一点。在一些真正的高手眼里,可能我还不入流。
其次,这段时间真的被问了很多问题,也渐渐知道了自己不擅长的地方在哪,所以今后也会更加认真的去研究一些东西,有机会的话也会继续分享自己学习的经历。
第三,其实单片机入门真的很简单,买块开发板,然后跟着配套视频学就行了,如果有不懂得地方,多听几遍,不理解的词,多百度几次,有句话说得很对:百度一下,你就知道,百度十下,你就知道的太多了!现在我遇到问题,也会习惯性的百度,基本都能解决。
最后,分享两个查芯片资料的网址,平时查什么芯片的datasheet,我基本都会用这两个网站
http://www.datasheet5.com 还有 http://www.21ic.com/